package com.Yasuo.pma.logging;


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.Objects;

@Aspect
@Component
public class ApplicationLoggerAspect {
    private final Logger log = LoggerFactory.getLogger(this.getClass());

    @Pointcut("within(com.Yasuo.pma.controllers..*)" + "||within(com.Yasuo.pma.dao..*)")
    public void definePackagePointcuts(){

    }

//    @Before("definePackagePointcuts()")
//    public void logBefore(JoinPoint joinPoint){
//        log.debug("\n\n\n");
//        log.debug("**************方法执行前**********************");
//        log.debug(
//                "{}.{}()输入参数{}",
//                joinPoint.getSignature().getDeclaringTypeName(),
//                joinPoint.getSignature().getName(),
//                Arrays.toString(joinPoint.getArgs())
//
//        );
//        log.debug("------------------------------");
//        log.debug("\n\n\n");
//    }
//
//    @After("definePackagePointcuts()")
//    public void logAfter(JoinPoint joinPoint) {
//        log.debug("\n\n\n");
//        log.debug("**************方法执行前**********************");
//        log.debug(
//                "{}.{}()输入参数{}",
//                joinPoint.getSignature().getDeclaringTypeName(),
//                joinPoint.getSignature().getName(),
//                Arrays.toString(joinPoint.getArgs())
//
//        );
//        log.debug("------------------------------");
//        log.debug("\n\n\n");
//    }
        @Around("definePackagePointcuts()")
        public Object logAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
            log.debug("\n\n\n");
            log.debug("**************方法执行前**********************");
            log.debug(
                    "{}.{}()输入参数{}",
                   proceedingJoinPoint.getSignature().getDeclaringTypeName(),
                    proceedingJoinPoint.getSignature().getName(),
                    Arrays.toString(proceedingJoinPoint.getArgs())

            );
            log.debug("------------------------------");
            log.debug("\n\n\n");

       Object object = proceedingJoinPoint.proceed();

            log.debug("\n\n\n");
            log.debug("**************方法执行后**********************");
            log.debug(
                    "{}.{}()输入参数{}",
                    proceedingJoinPoint.getSignature().getDeclaringTypeName(),
                    proceedingJoinPoint.getSignature().getName(),
                    Arrays.toString(proceedingJoinPoint.getArgs())

            );
            log.debug("------------------------------");
            log.debug("\n\n\n");

            return object;
    }

}
